01. 常用基本数据类型

本章导览

Python基本数据类型知识总览 展示本章涵盖的四大数据类型:数值型、字符串型、布尔型与类型转换。 Python 基本数据类型 数据类型 Data Types 数值型 int / float 字符串型 str 布尔型 True / False 类型转换 int() / float() / str() 掌握基本数据类型,是 Python 编程与金融数据分析的第一步

为什么数据类型很重要?

在金融和商业数据分析中,选择正确的数据类型是构建可靠程序的基础。

  • 股价是浮点数(float):105.50
  • 交易量是整数(int):23000
  • 股票代码是字符串(str):'600000.SH'
  • 是否涨停是布尔值(bool):True

数据类型决定了你可以对数据执行哪些操作

Python的类型系统:动态 + 强类型

特征 含义 举例
动态类型 变量无需声明类型,运行时自动绑定 x = 10 自动识别为int
强类型 不同类型之间不会隐式转换 '10' + 5 会报错
  • 优势:避免因隐式类型转换导致的精度丢失和计算错误
  • 金融意义:不会自动把浮点数变成整数,保证了计算精度

数值类型概览:int 与 float

Python中的数值类型主要包括两大类:

类型 说明 示例
int(整型) 任意精度整数,不限大小 100, -5, 0
float(浮点型) IEEE 754 双精度浮点数 3.14, -0.01
# 整型:精度只受内存限制
shares_count = 500         # 股票数量(整型)
print(type(shares_count))  # <class 'int'>

# 浮点型:约15-17位有效数字
stock_price = 105.50       # 股票价格(浮点型)
print(type(stock_price))   # <class 'float'>
<class 'int'>
<class 'float'>

年金终值的计算公式

普通年金(Ordinary Annuity)是金融学中的核心概念,指在每期期末进行等额收付的系列款项。

\[ \large{ FV = A \times \frac{(1+i)^n - 1}{i} }\]

  • \(FV\):年金终值
  • \(A\):每期年金金额
  • \(i\):每期利率
  • \(n\):期数

公式推导:等比数列求和

每期末支付金额A,利率i,期数n,各期终值累加为:

\[ \large{ FV = A(1+i)^{n-1} + A(1+i)^{n-2} + \cdots + A }\]

这是首项为A、公比为\((1+i)\)、项数为n的等比数列,由求和公式得:

\[ \large{ FV = \frac{A[(1+i)^n - 1]}{(1+i) - 1} = A \times \frac{(1+i)^n - 1}{i} }\]

⭐ 任务一:计算普通年金终值

Listing 1
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务一:完成计算普通年金终值的小程序
#计算普通年金终值
A=10000
i=0.05  # 设置年利率为5%
n=10  # 设置投资期限为10年
F=A*((1+i)**n-1)/i  # 根据普通年金终值公式计算终值F
print("普通年金终值是{:.2f}".format(F))  # 格式化输出普通年金终值(保留两位小数)
普通年金终值是125778.93

代码解析:变量赋值与幂运算

刚才的代码用到了几个核心语法:

  • 变量赋值:用 = 将值绑定到变量名
    • A = 10000 → 每期金额一万元
  • 幂运算符** 表示乘方
    • (1+i)**n\((1+0.05)^{10}\)
  • 运算符优先级:括号 > 幂运算 > 乘除 > 加减
  • 格式化输出'{:.2f}'.format(F) 保留两位小数

实际应用场景

年金终值公式在生活中有很多实际应用:

场景 说明
养老金规划 计算每月定投在退休时的总额
教育金储备 计算每月储蓄教育基金的未来价值
企业偿债基金 为偿还到期债务而建立的偿债基金

掌握了年金终值的计算,就掌握了复利的力量!

字符串类型简介

字符串是Python中用于表示文本数据的类型。

  • 引号创建:'hello''沪深300'
  • Python 3 采用 Unicode 编码,支持中英文
  • 字符串是不可变对象:修改操作实际上创建了新字符串

金融应用场景

  • 证券代码:'600000.SH'
  • 公司名称:'中国建设银行'
  • 交易日期:'2025-12-31'

字符串索引与切片

字符串索引与切片 展示字符串 ilovepython 的正向索引与切片操作 字符串索引机制:s = 'ilovepython' i l o v e p y t h o n 012 345 678 910 ↑ 正向索引 -11-10-9 -8-7-6 -5-4-3 -2-1 ↑ 负向索引 切片操作示例: s[0] → 'i' 第一个字符 s[2:5] → 'ove' 索引2到4 s[::-1] → 'nohtypevoli' 反转字符串 s[-1] → 'n' 最后一个字符 s[::2] → 'ioeyhн' 步长为2

⭐ 任务二:字符串的基本操作

Listing 2
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务二:给定字符串按要求输出
s = 'ilovepython'
a = 'helloworld'  # 定义第二个字符串变量
print(s)  # 输出完整字符串s
print(s[0])  # 输出字符串s的第一个字符(索引为0)
print(s[2:5])  # 输出字符串s的切片(索引2到4)
print(s+a)  # 输出两个字符串拼接后的结果
print(s.upper())  # 输出字符串s转换为大写后的结果
ilovepython
i
ove
ilovepythonhelloworld
ILOVEPYTHON

代码解析:任务二中的核心操作

代码 操作 结果
s[0] 获取第一个字符 'i'
s[2:5] 切片(索引2到4) 'ove'
s + a 字符串拼接 'ilovepythonhelloworld'
s.upper() 转换为大写 'ILOVEPYTHON'

关键点

  • 索引从 0 开始,不是1
  • 切片 [start:end] 包含start,不包含end
  • + 运算符在字符串间表示拼接,在数字间表示加法

中文字符串处理

Python 3 采用 Unicode 编码,可以无缝处理中文字符:

# 中文字符串示例
chinese = '沪深300指数'

# len()返回字符数(非字节数)
print(len(chinese))    # 输出: 7

# 索引和切片同样适用
print(chinese[0])      # 输出: 沪
print(chinese[:2])     # 输出: 沪深
7
沪
沪深

每个中文字符和英文字符在索引时地位相同,都占一个位置。

金融应用:证券代码处理

# 证券代码标准化:拼接股票代码与交易所标识
stock_code = '000001'
exchange = 'SZ'
full_code = stock_code + '.' + exchange
print(full_code)  # 000001.SZ (平安银行)

# 公司名称格式化:首字母大写
company = 'china construction bank'
print(company.title())  # China Construction Bank

# 从完整代码中提取交易所信息
code_with_exchange = '600000.SH'
market = code_with_exchange.split('.')[1]
print(market)  # SH (上海证券交易所)
000001.SZ
China Construction Bank
SH

类型转换:为什么需要?

不同来源的金融数据,其类型可能不一致:

  • 从Excel读取的价格可能是字符串 '10.55'
  • 计算交易金额需要的是浮点数 10.55
  • 展示结果又需要转回字符串

Python是强类型语言,不同类型之间不能直接运算,必须显式转换

常用类型转换函数

函数 功能 示例 金融应用
int() 转为整型 int('123')123 交易量转换
float() 转为浮点型 float('3.14')3.14 价格转换
str() 转为字符串 str(100)'100' 输出展示
bool() 转为布尔型 bool(1)True 状态判断

类型转换:正确与错误的方式

# 正确:显式转换后再计算
price_str = '10.55'
price_num = float(price_str)  # 字符串 → 浮点数
quantity = 100
amount = price_num * quantity
print(f'交易金额: {amount:.2f}')  # 1055.00

# 错误:不同类型不能直接运算
try:
    result = '10.55' + 100  # 字符串 + 整数 → TypeError!
except TypeError as error_message:
    print(f'错误: {error_message}')
交易金额: 1055.00
错误: can only concatenate str (not "int") to str

强类型的好处:避免因隐式转换导致的金融计算错误!

布尔类型:True 与 False

布尔类型只有两个值,在金融决策中广泛用于条件判断

# 比较运算符 → 返回布尔值
price = 105.5
reference_price = 100.0

is_above_ma = price > reference_price
print(is_above_ma)  # True
True

常用比较运算符

运算符 含义 示例
>, < 大于、小于 105 > 100True
>=, <= 大于等于、小于等于 100 >= 100True
== 等于 10 == 10True
!= 不等于 10 != 5True

逻辑运算符:组合多个条件

运算符 含义 规则
and 两个都为True才为True
or 任一为True就为True
not 取反
# 交易信号生成示例
price_above_ma = True     # 价格高于均线
volume_above_avg = True   # 成交量放大

# 买入信号:价格站上均线 且 成交量放大
buy_signal = price_above_ma and volume_above_avg
print(f'买入信号: {buy_signal}')  # True
买入信号: True

实战:止盈止损信号判断

# 平仓信号判断
current_price = 102.5   # 当前价格
stop_loss = 98.0         # 止损价
take_profit = 108.0      # 止盈价

# 触及止损线 或 止盈线 → 平仓
should_close = (current_price <= stop_loss) or (current_price >= take_profit)
print(f'是否平仓: {should_close}')  # False(未触及)
是否平仓: False

当前价格 102.5 在止损价(98)和止盈价(108)之间,因此不触发平仓。

真值测试:哪些值被视为 False?

Python中所有对象都可以进行布尔值测试:

被视为 False (Falsy) 被视为 True (Truthy)
None 非None的任何对象
0, 0.0 非零数值
'' (空字符串) 非空字符串
[], (), {} (空容器) 非空容器
False True
# 检查数据是否为空
trading_data = []  # 空列表
if trading_data:
    print('数据存在,开始分析')
else:
    print('数据为空,跳过分析')  # ← 执行这行
数据为空,跳过分析

浮点数精度:金融计算的陷阱

# 一个看似简单的加法...
result = 0.1 + 0.2
print(result)               # 0.30000000000000004 (不是0.3!)
print(0.1 + 0.2 == 0.3)    # False!
0.30000000000000004
False

原因:0.1 和 0.2 在二进制中无法精确表示(类似于 \(1/3\) 在十进制中无法精确表示)。

在金融计算中,这种微小误差可能累积失控

解决方案:精确计算方法

import math
from decimal import Decimal, getcontext

# 方法1:近似比较 (math.isclose)
print(math.isclose(0.1 + 0.2, 0.3))  # True

# 方法2:Decimal模块 (精确十进制运算)
getcontext().prec = 6  # 设置6位有效数字
price1 = Decimal('0.1')  # 注意:参数必须是字符串
price2 = Decimal('0.2')
result = price1 + price2
print(result)                       # 0.3 (精确!)
print(result == Decimal('0.3'))     # True
True
0.3
True

金融计算最佳实践

  • 货币计算:使用 Decimal 模块
  • 比较运算:使用 math.isclose() 而非 ==

本章总结

数据类型 关键字 金融应用
int 整型 交易量、期数
float 浮点型 股价、利率
str 字符串 证券代码、公司名称
bool 布尔型 条件判断、交易信号

核心要点

  • Python是强类型语言,类型转换必须显式进行
  • 金融计算要注意浮点精度问题,推荐使用 Decimal
  • 掌握字符串操作是数据清洗的基础